Coverage Report

Created: 2026-03-18 12:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
D:\a\scloud-dns\scloud-dns\src\exceptions\mod.rs
Line
Count
Source
1
use crate::dns::q_class::DNSClass;
2
use strum_macros::EnumIter;
3
4
mod tests;
5
6
#[repr(u16)]
7
#[allow(non_camel_case_types)]
8
#[derive(Debug, PartialEq, EnumIter, Clone)]
9
pub enum SCloudException {
10
    // HEADER SECTION
11
    SCLOUD_HEADER_DESERIALIZATION_FAILED = 0,
12
    SCLOUD_HEADER_BYTES_EMPTY = 1,
13
14
    // QUESTION SECTION
15
    SCLOUD_QUESTION_DESERIALIZATION_FAILED = 2,
16
    SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG = 3,
17
18
    // ANSWER SECTION
19
    SCLOUD_ANSWER_DESERIALIZATION_FAILED = 4,
20
    SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG = 5,
21
    SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT = 6,
22
    SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS = 7,
23
24
    // AUTHORITY SECTION
25
    SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS = 8,
26
    SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT = 9,
27
28
    // ADDITIONAL SECTION
29
    SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED = 10,
30
    SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT = 11,
31
    SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG = 12,
32
    SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS = 13,
33
34
    // QNAME
35
    SCLOUD_IMPOSSIBLE_PARSE_QNAME = 14,
36
    SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF = 15,
37
    SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF = 16,
38
    SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED = 17,
39
40
    // QTYPE
41
    SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN = 18,
42
    SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN = 77,
43
44
    //QCLASS
45
    SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN = 19,
46
    SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN = 20,
47
48
    // STUB RESOLVER
49
    SCLOUD_STUB_RESOLVER_INVALID_DNS_ID = 21,
50
    SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE = 22,
51
    SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET = 23,
52
    SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT = 24,
53
    SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET = 25,
54
    SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET = 26,
55
56
    // RESOLVER
57
    SCLOUD_RESOLVER_RESPONSE_MISMATCH = 27,
58
    SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE = 28,
59
    SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH = 29,
60
    SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH = 30,
61
    SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH = 31,
62
63
    // ZONES
64
    SCLOUD_ZONE_PARSER_FILE_NOT_FOUND = 32,
65
    SCLOUD_ZONE_PARSER_FILE_EMPTY = 33,
66
    SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE = 34,
67
    SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD = 35,
68
69
    // CONFIG
70
    SCLOUD_CONFIG_FILE_NOT_FOUND = 36,
71
    SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON = 37,
72
    SCLOUD_CONFIG_MISSING_FORWARDER = 38,
73
    SCLOUD_CONFIG_MISSING_ADDRESS = 39,
74
    SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR = 40,
75
    SCLOUD_CONFIG_INVALID_SERVER_PORT = 41,
76
    SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD = 42,
77
    SCLOUD_CONFIG_INVALID_DNS_LIMITS = 43,
78
    SCLOUD_CONFIG_INVALID_LISTENER = 44,
79
    SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME = 45,
80
    SCLOUD_CONFIG_INVALID_LISTENER_PORT = 46,
81
    SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS = 47,
82
    SCLOUD_CONFIG_TLS_MISSING_CERT = 48,
83
    SCLOUD_CONFIG_TLS_MISSING_KEY = 49,
84
    SCLOUD_CONFIG_TLS_REQUIRES_TCP = 50,
85
    SCLOUD_CONFIG_INVALID_DOH = 51,
86
    SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE = 52,
87
    SCLOUD_CONFIG_INVALID_FORWARDER = 53,
88
    SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME = 54,
89
    SCLOUD_CONFIG_INVALID_ZONE = 55,
90
    SCLOUD_CONFIG_DUPLICATE_ZONE_NAME = 56,
91
    SCLOUD_CONFIG_ZONE_MISSING_FILE = 57,
92
    SCLOUD_CONFIG_SLAVE_MISSING_MASTERS = 58,
93
    SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS = 59,
94
    SCLOUD_CONFIG_INVALID_INLINE_ZONE = 60,
95
    SCLOUD_CONFIG_UNKNOWN_TSIG_KEY = 61,
96
    SCLOUD_CONFIG_MX_MISSING_PRIORITY = 62,
97
    SCLOUD_CONFIG_PRIORITY_ON_NON_MX = 63,
98
    SCLOUD_CONFIG_INVALID_VIEW = 64,
99
    SCLOUD_CONFIG_DUPLICATE_VIEW_NAME = 65,
100
    SCLOUD_CONFIG_INVALID_DYNUPDATE = 66,
101
    SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE = 67,
102
103
    // LOGGING
104
    SCLOUD_LOGGING_PATH_CREATION_FAILED = 68,
105
    SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED = 69,
106
107
    // WORKER
108
    SCLOUD_WORKER_FAILED_TO_SPAWN = 70,
109
    SCLOUD_WORKER_TX_NOT_SET = 71,
110
    SCLOUD_WORKER_RX_NOT_SET = 72,
111
    SCLOUD_WORKER_LISTENER_BIND_FAILED = 73,
112
    SCLOUD_WORKER_FAILED_TO_CREATE_DECODER = 74,
113
    SCLOUD_WORKER_UNKNOWN_TYPE = 75,
114
    SCLOUD_WORKER_SEM_CLOSED = 81,
115
116
    // TCP ACCEPTOR
117
    SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED = 78,
118
    SCLOUD_WORKER_TCPA_RECV_FAILED = 79,
119
    SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED = 80,
120
121
    // LISTENER
122
    SCLOUD_WORKER_LISTENER_RECV_FAILED = 76,
123
    SCLOUD_WORKER_LISTENER_NO_SOCKET = 82,
124
125
    // DECODER
126
}
127
128
impl SCloudException {
129
    #[allow(unused)]
130
166
    pub(crate) fn to_str(&self) -> &'static str {
131
166
        match self {
132
            //HEADER SECTION
133
            SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => {
134
2
                "Buffer length is less than header length."
135
            }
136
137
2
            SCloudException::SCLOUD_HEADER_BYTES_EMPTY => "The header is empty.",
138
139
            // QUESTION SECTION
140
            SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => {
141
2
                "Buffer length is less than question section length."
142
            }
143
            SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => {
144
2
                "`q_name` too long."
145
            }
146
147
            // ANSWER SECTION
148
            SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => {
149
2
                "Buffer length is less than answer section length."
150
            }
151
            SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => {
152
2
                "Label too long for DNS."
153
            }
154
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => {
155
2
                "Failed to parse DNS answer section: not enough bytes for TYPE, CLASS, TTL, and RDLENGTH."
156
            }
157
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => {
158
2
                "Failed to parse DNS answer section: RDLENGTH exceeds remaining buffer size."
159
            }
160
161
            // AUTHORITY SECTION
162
            SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => {
163
2
                "Buffer length is less than authority section length."
164
            }
165
            SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => {
166
2
                "Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)"
167
            }
168
169
            // ADDITIONAL SECTION
170
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => {
171
2
                "Buffer length is less than additional section length."
172
            }
173
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => {
174
2
                "Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)"
175
            }
176
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => {
177
2
                "`q_name` too long."
178
            }
179
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => {
180
2
                "Buffer length is less than authority section length."
181
            }
182
183
            // QNAME
184
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => {
185
2
                "Impossible to parse the `q_name`, check if a `q_name` is provided."
186
            }
187
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => {
188
2
                "Impossible to parse the `q_name`, pos is greater than buffer length."
189
            }
190
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => {
191
2
                "Impossible to parse the `q_name`, pos and len are greater than buffer length."
192
            }
193
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => {
194
2
                "Impossible to parse the `q_name`, compression 0xC0xx failed."
195
            }
196
197
            // QTYPE
198
            SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN => {
199
2
                "Unknown `q_type`, failed to find a DNSRecordType for a u16."
200
            }
201
            SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN => {
202
2
                "Unknown `q_type`, failed to find a u16 for a DNSRecordType."
203
            }
204
205
            //QCLASS
206
            SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => {
207
2
                "Unknown `q_class`, failed to find a DNSClass for a u16."
208
            }
209
            SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => {
210
2
                "Unknown `q_class`, failed to find a u16 for a DNSClass."
211
            }
212
213
            // STUB RESOLVER
214
            SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => {
215
2
                "Invalid DNS ID (difference between `response.header.id` and `request_id`)."
216
            }
217
2
            SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => "Invalid DNS response.",
218
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => {
219
2
                "Failed to create UDP socket."
220
            }
221
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => {
222
2
                "Failed to read, socket timeout."
223
            }
224
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => {
225
2
                "Failed to send to socket."
226
            }
227
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => {
228
2
                "Failed to receive from socket."
229
            }
230
231
            // RESOLVER
232
            SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH => {
233
2
                "DNS response failed validation against the original query."
234
            }
235
2
            SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => "Record out of zone.",
236
            SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH => {
237
2
                "`AnswerSection.q_name` is not the same as `QuestionSection.q_name`"
238
            }
239
            SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH => {
240
2
                "`AuthoritySection.q_name` is not the same as `QuestionSection.q_name`"
241
            }
242
            SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH => {
243
2
                "`AdditionnalSection.q_name` is not the same as `QuestionSection.q_name`"
244
            }
245
246
            // ZONES
247
2
            SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => "Zone file not found.",
248
2
            SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => "Zone file is empty.",
249
            SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => {
250
2
                "`zone_parser()` failed to read the zone file."
251
            }
252
            SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => {
253
2
                "`zone_parser()` detect TTL field but failed to read this field."
254
            }
255
256
            //CONFIG
257
2
            SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => "Configuration file not found.",
258
            SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => {
259
2
                "Error while parsing the JSON file."
260
            }
261
2
            SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => "Missing forwarder.",
262
2
            SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => "Missing address.",
263
            SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => {
264
2
                "Error while parsing the IP address."
265
            }
266
            SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => {
267
2
                "Invalid server port (must be between 1 and 65535)."
268
            }
269
            SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => {
270
2
                "Invalid max UDP payload size."
271
            }
272
            SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => {
273
2
                "Invalid DNS limits (label length, domain length, or packet size)."
274
            }
275
2
            SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => "Invalid listener configuration.",
276
            SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => {
277
2
                "Duplicate listener name detected."
278
            }
279
2
            SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => "Invalid listener port.",
280
            SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => {
281
2
                "Listener has no valid protocol defined."
282
            }
283
            SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => {
284
2
                "TLS enabled but certificate path is missing."
285
            }
286
            SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => {
287
2
                "TLS enabled but private key path is missing."
288
            }
289
2
            SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => "TLS listeners require TCP support.",
290
            SCloudException::SCLOUD_CONFIG_INVALID_DOH => {
291
2
                "Invalid DNS-over-HTTPS (DoH) configuration."
292
            }
293
            SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => {
294
2
                "Unknown or invalid ACL reference."
295
            }
296
2
            SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => "Invalid forwarder configuration.",
297
            SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => {
298
2
                "Duplicate forwarder name detected."
299
            }
300
2
            SCloudException::SCLOUD_CONFIG_INVALID_ZONE => "Invalid DNS zone configuration.",
301
2
            SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => "Duplicate zone name detected.",
302
2
            SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => "Zone file path is missing.",
303
            SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => {
304
2
                "Slave zone has no master servers defined."
305
            }
306
            SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => {
307
2
                "Forward zone has no forwarders defined."
308
            }
309
            SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => {
310
2
                "Inline zone is invalid (missing records or SOA)."
311
            }
312
            SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => {
313
2
                "Referenced TSIG key does not exist."
314
            }
315
            SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => {
316
2
                "MX record is missing priority field."
317
            }
318
            SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => {
319
2
                "Priority field is only allowed on MX records."
320
            }
321
2
            SCloudException::SCLOUD_CONFIG_INVALID_VIEW => "Invalid DNS view configuration.",
322
2
            SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => "Duplicate view name detected.",
323
            SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => {
324
2
                "Invalid dynamic update configuration."
325
            }
326
            SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => {
327
2
                "Dynamic update references an unknown zone."
328
            }
329
330
            // LOGGING
331
2
            SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED => "Logging path creation failed.",
332
            SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED => {
333
2
                "Log file creation/opening failed."
334
            }
335
336
            // WORKER
337
            SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN => {
338
2
                "Failed to link the worker to the thread, and cannot spawn a worker."
339
            }
340
2
            SCloudException::SCLOUD_WORKER_TX_NOT_SET => "`dns_tx` is not set for this worker.",
341
2
            SCloudException::SCLOUD_WORKER_RX_NOT_SET => "`dns_rx` is not set for this worker.",
342
            SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED => {
343
2
                "Listener bind just failed at 'threads::run(&self)'."
344
            }
345
            SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER => {
346
2
                "Failed to create a decoding worker."
347
            }
348
2
            SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE => "Unknown worker type.",
349
            SCloudException::SCLOUD_WORKER_SEM_CLOSED => {
350
2
                "Failed to .acquire_owned(), because the Semaphore is closed."
351
            }
352
353
            // TCP ACCEPTOR
354
            SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED => {
355
2
                "Impossible to create a TCP_ACCEPTOR worker, socket creation failed."
356
            }
357
            SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED => {
358
2
                "TCP_ACCEPTOR recv() failed."
359
            }
360
            SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED => {
361
2
                "Impossible to bind TCP_ACCEPTOR socket, most probable cause: another worker is already using this port."
362
            }
363
364
            // LISTENER
365
2
            SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED => "Listener recv() failed.",
366
            SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET => {
367
2
                "LISTENER worker spawned directly — use TCP_ACCEPTOR instead."
368
            }
369
0
            _ => "Unknown error.",
370
        }
371
166
    }
372
}
373
374
impl TryFrom<u16> for SCloudException {
375
    type Error = SCloudException;
376
377
238
    fn try_from(v: u16) -> Result<Self, Self::Error> {
378
238
        match v {
379
            //HEADER SECTION
380
3
            0 => Ok(SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED),
381
3
            1 => Ok(SCloudException::SCLOUD_HEADER_BYTES_EMPTY),
382
383
            // QUESTION SECTION
384
3
            2 => Ok(SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED),
385
3
            3 => Ok(SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG),
386
387
            // ANSWER SECTION
388
3
            4 => Ok(SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED),
389
3
            5 => Ok(SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG),
390
3
            6 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT),
391
3
            7 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS),
392
393
            // AUTHORITY SECTION
394
3
            8 => Ok(SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS),
395
3
            9 => Ok(SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT),
396
397
            // ADDITIONAL SECTION
398
3
            10 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED),
399
3
            11 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT),
400
3
            12 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG),
401
3
            13 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS),
402
403
            // QNAME SECTION
404
3
            14 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME),
405
3
            15 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF),
406
3
            16 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF),
407
3
            17 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED),
408
409
            // ANSWER SECTION
410
3
            18 => Ok(SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN),
411
3
            77 => Ok(SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN),
412
413
3
            19 => Ok(SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN),
414
3
            20 => Ok(SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN),
415
416
3
            21 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID),
417
3
            22 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE),
418
3
            23 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET),
419
3
            24 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT),
420
3
            25 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET),
421
3
            26 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET),
422
3
            27 => Ok(SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH),
423
3
            28 => Ok(SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE),
424
3
            29 => Ok(SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH),
425
3
            30 => Ok(SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH),
426
3
            31 => Ok(SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH),
427
3
            32 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND),
428
3
            33 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY),
429
3
            34 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE),
430
3
            35 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD),
431
3
            36 => Ok(SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND),
432
3
            37 => Ok(SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON),
433
3
            38 => Ok(SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER),
434
3
            39 => Ok(SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS),
435
3
            40 => Ok(SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR),
436
3
            41 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT),
437
3
            42 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD),
438
3
            43 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS),
439
3
            44 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER),
440
3
            45 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME),
441
3
            46 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT),
442
3
            47 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS),
443
3
            48 => Ok(SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT),
444
3
            49 => Ok(SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY),
445
3
            50 => Ok(SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP),
446
3
            51 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DOH),
447
3
            52 => Ok(SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE),
448
3
            53 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER),
449
3
            54 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME),
450
3
            55 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_ZONE),
451
3
            56 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME),
452
3
            57 => Ok(SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE),
453
3
            58 => Ok(SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS),
454
3
            59 => Ok(SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS),
455
3
            60 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE),
456
3
            61 => Ok(SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY),
457
3
            62 => Ok(SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY),
458
3
            63 => Ok(SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX),
459
3
            64 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_VIEW),
460
3
            65 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME),
461
3
            66 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE),
462
3
            67 => Ok(SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE),
463
3
            68 => Ok(SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED),
464
3
            69 => Ok(SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED),
465
3
            70 => Ok(SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN),
466
3
            71 => Ok(SCloudException::SCLOUD_WORKER_TX_NOT_SET),
467
3
            72 => Ok(SCloudException::SCLOUD_WORKER_RX_NOT_SET),
468
3
            73 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED),
469
3
            74 => Ok(SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER),
470
3
            75 => Ok(SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE),
471
3
            76 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED),
472
0
            78 => Ok(SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED),
473
0
            79 => Ok(SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED),
474
0
            80 => Ok(SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED),
475
0
            81 => Ok(SCloudException::SCLOUD_WORKER_SEM_CLOSED),
476
0
            82 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET),
477
478
4
            _ => Err(SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE),
479
        }
480
238
    }
481
}
482
483
impl TryFrom<SCloudException> for u16 {
484
    type Error = SCloudException;
485
486
234
    fn try_from(c: SCloudException) -> Result<u16, Self::Error> {
487
        #[allow(unreachable_patterns)]
488
234
        match c {
489
3
            SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => Ok(0),
490
3
            SCloudException::SCLOUD_HEADER_BYTES_EMPTY => Ok(1),
491
3
            SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => Ok(2),
492
3
            SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => Ok(3),
493
3
            SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => Ok(4),
494
3
            SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => Ok(5),
495
3
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => Ok(6),
496
3
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => Ok(7),
497
3
            SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => Ok(8),
498
3
            SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => Ok(9),
499
3
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => Ok(10),
500
3
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => Ok(11),
501
3
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => Ok(12),
502
3
            SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => Ok(13),
503
3
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => Ok(14),
504
3
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => Ok(15),
505
3
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => Ok(16),
506
3
            SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => Ok(17),
507
3
            SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN => Ok(18),
508
3
            SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN => Ok(77),
509
3
            SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => Ok(19),
510
3
            SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => Ok(20),
511
3
            SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => Ok(21),
512
3
            SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => Ok(22),
513
3
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => Ok(23),
514
3
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => Ok(24),
515
3
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => Ok(25),
516
3
            SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => Ok(26),
517
3
            SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH => Ok(27),
518
3
            SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => Ok(28),
519
3
            SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH => Ok(29),
520
3
            SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH => Ok(30),
521
3
            SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH => Ok(31),
522
3
            SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => Ok(32),
523
3
            SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => Ok(33),
524
3
            SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => Ok(34),
525
3
            SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => Ok(35),
526
3
            SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => Ok(36),
527
3
            SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => Ok(37),
528
3
            SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => Ok(38),
529
3
            SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => Ok(39),
530
3
            SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => Ok(40),
531
3
            SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => Ok(41),
532
3
            SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => Ok(42),
533
3
            SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => Ok(43),
534
3
            SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => Ok(44),
535
3
            SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => Ok(45),
536
3
            SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => Ok(46),
537
3
            SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => Ok(47),
538
3
            SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => Ok(48),
539
3
            SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => Ok(49),
540
3
            SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => Ok(50),
541
3
            SCloudException::SCLOUD_CONFIG_INVALID_DOH => Ok(51),
542
3
            SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => Ok(52),
543
3
            SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => Ok(53),
544
3
            SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => Ok(54),
545
3
            SCloudException::SCLOUD_CONFIG_INVALID_ZONE => Ok(55),
546
3
            SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => Ok(56),
547
3
            SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => Ok(57),
548
3
            SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => Ok(58),
549
3
            SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => Ok(59),
550
3
            SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => Ok(60),
551
3
            SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => Ok(61),
552
3
            SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => Ok(62),
553
3
            SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => Ok(63),
554
3
            SCloudException::SCLOUD_CONFIG_INVALID_VIEW => Ok(64),
555
3
            SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => Ok(65),
556
3
            SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => Ok(66),
557
3
            SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => Ok(67),
558
3
            SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED => Ok(68),
559
3
            SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED => Ok(69),
560
3
            SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN => Ok(70),
561
3
            SCloudException::SCLOUD_WORKER_TX_NOT_SET => Ok(71),
562
3
            SCloudException::SCLOUD_WORKER_RX_NOT_SET => Ok(72),
563
3
            SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED => Ok(73),
564
3
            SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER => Ok(74),
565
3
            SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE => Ok(75),
566
3
            SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED => Ok(76),
567
0
            SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED => Ok(78),
568
0
            SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED => Ok(79),
569
0
            SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED => Ok(80),
570
0
            SCloudException::SCLOUD_WORKER_SEM_CLOSED => Ok(81),
571
0
            SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET => Ok(82),
572
0
            _ => Err(SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN),
573
        }
574
234
    }
575
}